/**
 * @class Scenes 场景值模型
 */
const BaseMod = require('./base');
const Platform = require('./platform');
module.exports = class Scenes extends BaseMod {
    constructor() {
        super();
        this.tableName = 'mp-scenes';
        this.defualtCode = '1001';
    }

    /**
     * 获取场景值
     * @param {String} platform 平台代码
     * @param {String} code 场景值代码
     */
    async getScenes(platform, code) {
        const cacheKey = 'uni-stat-scenes-' + platform + '-' + code;
        let scenesData = await this.getCache(cacheKey);
        if (!scenesData) {
            const scenesInfo = await this.getCollection(this.tableName)
                .where({
                    platform: platform,
                    scene_code: code,
                })
                .limit(1)
                .get();
            scenesData = [];
            if (scenesInfo.data.length > 0) {
                scenesData = scenesInfo.data[0];
                await this.setCache(cacheKey, scenesData);
            }
        }
        return scenesData;
    }

    /**
     * 通过平台编号获取场景值
     * @param {String} platformId 平台编号
     * @param {String} code 场景值代码
     */
    async getScenesByPlatformId(platformId, code) {
        const platform = new Platform();
        let platformInfo = await this.getCollection(platform.tableName)
            .where({
                _id: platformId,
            })
            .limit(1)
            .get();
        let scenesData;
        if (platformInfo.data.length > 0) {
            platformInfo = platformInfo.data[0];
            scenesData = await this.getScenes(platformInfo.code, code);
        } else {
            scenesData = [];
        }
        return scenesData;
    }

    /**
     * 获取场景值名称
     * @param {String} platform 平台代码
     * @param {String} code 场景值代码
     */
    async getScenesName(platform, code) {
        const scenesData = await this.getScenes(platform, code);
        if (scenesData.length === 0) {
            return '';
        }
        return scenesData.scene_name;
    }

    /**
     * 通过平台编号获取场景值名称
     * @param {String} platformId 平台编号
     * @param {String} code 场景值代码
     */
    async getScenesNameByPlatformId(platformId, code) {
        const scenesData = await this.getScenesByPlatformId(platformId, code);
        if (scenesData.length === 0) {
            return code === this.defualtCode ? '默认' : '';
        }
        return scenesData.scene_name;
    }
};
